package main

import (
	"fmt"
	"gorm.io/gorm"
)

// 型号
type DeviceModel struct {
	gorm.Model
	Name    string `gorm:"unique"` //型号名称
	FuncStr string //功能配置
	Type    string //类型 0位置  1 儿童手表 2 蓝牙手表
}

// 设备
type Device struct {
	gorm.Model

	Imei          string `gorm:"uniqueIndex"`
	DeviceModelId uint   `gorm:"not null"` //外键 型号
	FuncStr       string //功能配置字符串 如果为空 默认使用型号的功能配置
	AdminUserID   uint   //管理者 设备所属组织/公司/个人

}

// 用户
type User struct {
	gorm.Model
	Email    string `gorm:"uniqueIndex"`
	Phone    string `gorm:"uniqueIndex"`
	Password string
	Admin    uint //是否为管理员  0 普通用户  1公司  2超级管理

}

// 绑定关系
type UserDeviceBind struct {
	gorm.Model
	DeviceID     uint   `gorm:"index:idx_bind"`
	UserID       uint   `gorm:"index:idx_bind"`
	RelationName string //绑定关系
	IsAdmin      uint   //是否为主管理员
}

// 新建设备型号
func crateDeviceModels(db *gorm.DB) {

	h18 := DeviceModel{Name: "H18"}
	result := db.Create(&h18)

	println("create type result:", result)

}

// 新建测试用户
func crateTestUserModels(db *gorm.DB) {

	user := User{Phone: "18675079557", Email: "18675079557@163.com", Admin: 1}
	result := db.Create(&user)

	println("create user result:", result.Error.Error())

}

// 导入设备
func crateTestDeviceModels(db *gorm.DB) {

	modelName := "H18" //根据型号名字导入设备

	//查找是否有此型号
	var DeviceModelH18 DeviceModel

	//	result := db.Where("Name = ?", modelName).First(&DeviceModelH18)
	result := db.Find(&DeviceModelH18, "Name = ?", modelName)

	if result.Error != nil {
		println("find model result:", result.Error.Error())
		return
	}

	var importDevices []Device

	//导入一百个涉笔
	for i := 0; i < 100; i++ {
		newDevice := Device{}
		newDevice.Imei = fmt.Sprintf("511829040000%03d", i)
		newDevice.DeviceModelId = DeviceModelH18.ID
		newDevice.AdminUserID = 1
		importDevices = append(importDevices, newDevice)
	}

	importResult := db.Create(importDevices)
	if importResult.Error != nil {
		println("import err:", importResult.Error.Error())
	}
}

func migrateAllTables(db *gorm.DB) {

	// 迁移 schema
	db.AutoMigrate(&Device{})
	db.AutoMigrate(&DeviceModel{})
	db.AutoMigrate(&User{})
	db.AutoMigrate(&UserDeviceBind{})
}

func DeviceSample() {

	migrateAllTables(GLOBAL_DB)

	//crateDeviceModels(db) //创建一些测试型号
	//crateTestUserModels(db)
	//crateTestDeviceModels(db)

}
